#include"defines.h"
#include"headGram.h"

using namespace std;

char expected;
extern element current;


bool match(int signal) {
	//adnvance
	expected = signal;
	if (current.belong == signal) return 1;

	return 0;
}

bool G_S() {
	/* S->V=E */

	return G_V() && match(T_GRS) && G_E();
}

bool G_E() {
	/* E->TE' */

	return G_T() && G_Ep();
}

bool G_Ep() {
	/* E'->ATE'|null */
	if (G_A()) {
		return G_T() && G_Ep();
	}

	return 1;
}

bool G_T() {
	/* T->FT' */

	return G_F() && G_Tp();
}

bool G_Tp() {
	/* T'->MFT'|null */

	if (G_M()) {
		return G_F() && G_Tp();
	}

	return 1;
}

bool G_F() {
	/* F->(E)|i */

	if (match(T_GFL)) {
		return G_E() && match(T_GFR);
	}

	return match(T_TAG);
}

bool G_A() {
	/* A->+|- */

	return match(T_GRA);
}

bool G_M() {
	/* M->*|/ */

	return match(T_GRM);
}

bool G_V() {
	/* V->i */

	return match(T_TAG);
}